package com.LONE.spring6.tx.service;

import com.LONE.spring6.tx.dao.BookDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

/**
 * @Project ：learn_spring
 * @File ：BookServiceImpl.java
 * @IDE ：IntelliJ IDEA
 * @Author ：自由如风间
 * @Date ：2025/4/5 10:55
 * @Description ：For study.
 */

// 当涉及数据库的代码出错时有时也会改变数据，
// 而@Transactional则会在数据库操作出错时防止数据被修改，
// 实现事务回滚
@Transactional(propagation = Propagation.REQUIRED)
@Service
public class BookServiceImpl implements BookService {

    @Autowired
    private BookDao bookDao;

    @Override
    public boolean buyBook(Integer bookId, Integer userId) {
        // 根据图书id查询图书价格
        Integer price = bookDao.getPriceByBookId(bookId);
        // 根据用户id查询用户余额
        Integer balance = bookDao.getBalanceByUserId(userId);

        /**
         * 余额不足，购买失败
         */
        if (balance < price) {
            return false;
        }

        // 更新图书表库存量 -1
        bookDao.updateStock(bookId);

        // 更新用户表用户余额 - 图书价格
        bookDao.updateUserBalance(userId, price);

        // 购买操作成功
        return true;
    }
}
